// DAO/Impl/SectionDaoImpl.java
package com.hp.DAO.Impl;                         // 实现包

import com.hp.DAO.BaseDao;                       // 基类
import com.hp.DAO.SectionDao;                    // 接口：SectionDao
import com.hp.Model.Section;                     // 实体：章节
import com.hp.Util.RowMapper;                    // 行映射器
import com.hp.Util.SimpleJdbcTemplate;           // JDBC 模板

import java.sql.Timestamp;                // 时间戳
import java.util.Date;                    // Date
import java.util.List;                    // List

/** SectionDao 的 JDBC 实现 */
public class SectionDaoImpl extends BaseDao implements SectionDao {
    public SectionDaoImpl(SimpleJdbcTemplate jdbc) { super(jdbc); } // 构造注入

    // RowMapper：ResultSet -> Section
    private static final RowMapper<Section> M = rs -> {
        Section s = new Section();                                  // 新建实体
        s.setId(rs.getLong("id"));                                   // id
        s.setCourseId(rs.getLong("course_id"));                      // 课程ID
        s.setTitle(rs.getString("title"));                           // 标题
        s.setOrderNo(rs.getInt("order_no"));                         // 顺序号
        Timestamp ts = rs.getTimestamp("created_at");                // 创建时间
        s.setCreatedAt(ts == null ? null : new Date(ts.getTime()));  // 转 Date
        return s;                                                    // 返回
    };

    @Override
    public Section findById(Long id) {                               // 按主键查询
        String sql = "SELECT id,course_id,title,order_no,created_at FROM section WHERE id=?"; // SQL
        return queryOne(sql, M, id);                                  // 执行
    }

    @Override
    public List<Section> listByCourse(Long courseId) {                // 按课程列出全部章节
        String sql = "SELECT id,course_id,title,order_no,created_at FROM section WHERE course_id=? ORDER BY order_no ASC"; // SQL
        return queryList(sql, M, courseId);                           // 执行
    }

    @Override
    public Long insert(Section s) {                                   // 新增章节
        String sql = "INSERT INTO section (course_id,title,order_no,created_at) VALUES (?,?,?,?)"; // SQL
        Date created = s.getCreatedAt() == null ? new Date() : s.getCreatedAt(); // 默认当前
        return execInsertReturnId(sql, s.getCourseId(), s.getTitle(), s.getOrderNo(),
                new Timestamp(created.getTime()));                    // 执行插入
    }

    @Override
    public int updateTitleAndOrder(Section s) {                       // 更新标题与序号
        String sql = "UPDATE section SET title=?, order_no=? WHERE id=?"; // SQL
        return execUpdate(sql, s.getTitle(), s.getOrderNo(), s.getId()); // 执行更新
    }

    @Override
    public int deleteById(Long id) {                                  // 删除章节
        String sql = "DELETE FROM section WHERE id=?";                // SQL
        return execUpdate(sql, id);                                   // 执行删除
    }
}
